76d4859eda56dde318448741559671e54c78d7c9,jetty-server/src/main/java/org/eclipse/jetty/server/handler/ResourceHandler.java,ResourceHandler,handle,#String#Request#HttpServletRequest#HttpServletResponse#,344

Before Change


       
        if (out instanceof HttpOutput)
        {
            ((HttpOutput)out).sendContent(resource);
        }
        else
        {

After Change


            skipContentBody = true;
        }

        Resource resource = getResource(request);

        if (resource==null || !resource.exists())
        {
            if (target.endsWith("/jetty-dir.css"))
            {
                resource = getStylesheet();
                if (resource==null)
                    return;
                response.setContentType("text/css");
            }
            else
            {
                //no resource - try other handlers
                super.handle(target, baseRequest, request, response);
                return;
            }
        }

        // We are going to serve something
        baseRequest.setHandled(true);

        if (resource.isDirectory())
        {
            if (!request.getPathInfo().endsWith(URIUtil.SLASH))
            {
                response.sendRedirect(response.encodeRedirectURL(URIUtil.addPaths(request.getRequestURI(),URIUtil.SLASH)));
                return;
            }

            Resource welcome=getWelcome(resource);
            if (welcome!=null && welcome.exists())
                resource=welcome;
            else
            {
                doDirectory(request,response,resource);
                baseRequest.setHandled(true);
                return;
            }
        }

        // set some headers
        long last_modified=resource.lastModified();
        String etag=null;
        if (_etags)
        {
            // simple handling of only a single etag
            String ifnm = request.getHeader(HttpHeader.IF_NONE_MATCH.asString());
            etag=resource.getWeakETag();
            if (ifnm!=null && resource!=null && ifnm.equals(etag))
            {
                response.setStatus(HttpStatus.NOT_MODIFIED_304);
                baseRequest.getResponse().getHttpFields().put(HttpHeader.ETAG,etag);
                return;
            }
        }
        
        
        if (last_modified>0)
        {
            long if_modified=request.getDateHeader(HttpHeader.IF_MODIFIED_SINCE.asString());
            if (if_modified>0 && last_modified/1000<=if_modified/1000)
            {
                response.setStatus(HttpStatus.NOT_MODIFIED_304);
                return;
            }
        }

        String mime=_mimeTypes.getMimeByExtension(resource.toString());
        if (mime==null)
            mime=_mimeTypes.getMimeByExtension(request.getPathInfo());

        // set the headers
        doResponseHeaders(response,resource,mime!=null?mime.toString():null);
        if (_etags)
            baseRequest.getResponse().getHttpFields().put(HttpHeader.ETAG,etag);
        
        if(skipContentBody)
            return;
        
        // Send the content
        OutputStream out =null;
        try {out = response.getOutputStream();}
        catch(IllegalStateException e) {out = new WriterOutputStream(response.getWriter());}

        if (last_modified>0)
            response.setDateHeader(HttpHeader.LAST_MODIFIED.asString(),last_modified);
       
        if (out instanceof HttpOutput && request.isAsyncSupported())
        {
            final AsyncContext async = request.startAsync();
            ((HttpOutput)out).sendContent(resource.getReadableByteChannel(),new Callback()
            {
                @Override
                public void succeeded()
                {
                    async.complete();
                }

                @Override
                public void failed(Throwable x)
                {
                    async.complete();
                }   
            });
        }
        else
        {